package BehavioralPattern.TemplateMethod;

/**
 * @Classname : AbstractBankBusiness
 * @Description : 抽象手机类
 * @Author : chentianyu
 * @Date 2023/1/18 21:49
 */


public abstract class AbstractPhone {
    /**
     * 基本方法
     */
    // 开机
    protected abstract void powerOn();
    // 屏幕点亮
    protected abstract void screenOn();
    // 应用运行
    protected abstract void appRun();
    // 电量耗尽关机
    protected abstract void powerOff();
    // 充电（钩子方法 Hook Method）
    protected abstract boolean charge();


    /**
     * 模板方法
     *
     *
     */
    public void run() {
        powerOn();
        screenOn();
        appRun();
        if (!charge()) {
            powerOff();
        }
    }

}
